package com.zx.core.context;

/**
 * 租户上下文持有者
 * 用于在请求处理过程中维护租户信息
 */
public class TenantContextHolder {
    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
    private static final ThreadLocal<String> TENANT_NAME_HOLDER = new ThreadLocal<>();

    /**
     * 获取当前租户ID，如果为空则抛出异常
     *
     * @return 租户ID
     * @throws IllegalStateException 当无法获取租户ID时抛出
     */
    public static String getTenantId() {
        String tenantId = CONTEXT_HOLDER.get();
        if (tenantId == null || tenantId.isEmpty()) {
            throw new IllegalStateException("无法获取当前租户信息");
        }
        return tenantId;
    }

    /**
     * 设置当前租户ID
     *
     * @param tenantId 租户ID
     */
    public static void setTenantId(String tenantId) {
        CONTEXT_HOLDER.set(tenantId);
    }

    /**
     * 获取当前租户名称，如果为空则抛出异常
     *
     * @return 租户名称
     * @throws IllegalStateException 当无法获取租户名称时抛出
     */
    public static String getTenantName() {
        String tenantName = TENANT_NAME_HOLDER.get();
        if (tenantName == null || tenantName.isEmpty()) {
            throw new IllegalStateException("无法获取当前租户名称");
        }
        return tenantName;
    }

    /**
     * 设置当前租户名称
     *
     * @param tenantName 租户名称
     */
    public static void setTenantName(String tenantName) {
        TENANT_NAME_HOLDER.set(tenantName);
    }

    /**
     * 清除当前租户ID和名称
     */
    public static void clear() {
        CONTEXT_HOLDER.remove();
        TENANT_NAME_HOLDER.remove();
    }
}